package com.itzhoun;

/**
 * @author 周楠
 * @Date 2023/01/14/下午 3:09
 */
public class Director {

    /**
     * 指挥者 将具体的生产器构造出产品对象
     */

    private ComputerBuilder computerBuilder;

    public void setComputerBuilder(ComputerBuilder computerBuilder) {
        this.computerBuilder = computerBuilder;
    }

    public Computer getComputer(){
        return computerBuilder.getComputer();
    }

    public void constructComputer(){
        computerBuilder.buildComputer();
        computerBuilder.buildMaster();
        computerBuilder.buildScreen();
        computerBuilder.buildKeyboard();
        computerBuilder.buildAudio();
        computerBuilder.buildMouse();
    }

    /**
     * 实例化指挥者 然后设置需要组装哪种具体生成者 然后组装获取
     * 优点：
     * 将一个对象分解为各个组件
     *
     * 将对象组件的构造封装起来
     *
     * 可以控制整个对象的生成过程
     *
     * 缺点：
     * 对不同类型的对象需要实现不同的具体构造器的类，这可能回答大大增加类的数量
     */
    public static void main(String[] args) {
        Director director = new Director();
        director.setComputerBuilder(new HPComputerBuilder());
        director.constructComputer();
        Computer computer = director.getComputer();

        System.out.println("电脑信息" + computer.toString());


    }
}
